import { getProfile, login, getUserDetailById } from '@/api/user'
// import { setToken, getToken } from '@/utils/auth'
const state = {
  // 存放数据
  token: localStorage.getItem('token') || '',
  // token: getToken() || ''
  userInfo: {}
}
const mutations = {
  // 修改数据
  setToken(state, newToken) {
    state.token = newToken
    localStorage.setItem('token', newToken)
    // setToken(newToken)
  },
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  logout(state) {
    localStorage.removeItem('token')
    state.token = ''
    state.userInfo = {}
  }
}
const actions = {
  // login: function(store, loginForm) {
  // 将调用时传入的登录表单，用来发请求
  // 看看有什么结果
  // login(loginForm).then(res => {
  //   // 调用mutations存到state中
  //   console.log(loginForm)
  //   console.log('action发请求')
  //   // console.log(res)
  //   console.log(res.data.data)
  //   store.commit('setToken', res.data.data)
  // })
  // .then的写法其实是代表，需要等待.then之前的异步函数执行完毕
  // 接着才能执行then里面的回调，才可以获取res
  // promise 有一个语法糖 async await
  async login(store, loginForm) {
    const res = await login(loginForm)
    console.log('登陆成功')
    store.commit('setToken', res)
    // 如果要主动接入token失效，
    // 可以登录成功
    localStorage.setItem('loginTime', Date.now())
  },
  async getUserInfo(store) {
    // 当拿完数据直接用 mutations 存放即可
    const res = await getProfile()
    const detail = await getUserDetailById(res.userId)
    // console.log(res, detail)
    // console.log('获取用户数据的 action')
    // 这里需要发请求，需要两个文件的帮助
    // 1、是用来封装api接口  /src/api/user
    // 2. 是用来统一注入 token /src/utils/request.js
    store.commit('setUserInfo', {
      ...res,
      ...detail
    })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

